<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // ES5 的对象属性名都是字符串，这容易造成属性名的冲突。比如，你使用了一个他人提供的对象，但又想为这个对象添加新的方法（mixin 模式），新方法的名字就有可能与现有方法产生冲突。如果有一种机制，保证每个属性的名字都是独一无二的就好了，这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol的原因。

    // var zhang = {
    //     "name": "张三",
    //     "age": 18,
    //     height: "173cm",
    //     weight: "70kg",
    // }
    // console.log(zhang);

    // console.log(zhang.name);
    // console.log(zhang["age"]);


    console.log(Math); // 官方给定对象

    // 在Math上追加一个新的方法  => 随机指定范围的整数 
    // 新的方法名 就可能和以前的方法名冲突
    // 1. 自己指定新方法名
    // 2. 在方法明前加前缀 _xxx
    // 3. 通过 ES6 引入Symbol的原因 创建一个独一无二的属性 

    Math._random = function (min, max) {  // 100 - 999
        // debugger;
        // 参数处理
        if (!Number.isInteger(min)) {
            // !Number.isInteger(min) == true =>  Number.isInteger(min) == false
            var err = new Error("Parameter 1 must be an integer");  //创建错误
            throw err; // 抛出错误
        }
        if (!Number.isInteger(max)) {
            // !Number.isInteger(min) == true =>  Number.isInteger(min) == false
            var err = new Error("Parameter 2 must be an integer");  //创建错误
            throw err; // 抛出错误
        }

        if (min > max) {
            var err = new Error("Parameter 1 must be less than parameter 2");  //创建错误
            throw err; // 抛出错误
        }

        return min + Math.round(Math.random() * (max - min));
    }

    // Math.rand(0.1, 0.5);
    // Math.rand(1, 0.5);
    // Math.rand(200, 100);

    var result = Math._random(100, 200);
    console.log(result);


</script>

</html>